{
 "cells": [
  {
   "cell_type": "code",
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2025-11-05T01:49:11.043571Z",
     "start_time": "2025-11-05T01:49:11.038437Z"
    }
   },
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ],
   "outputs": [],
   "execution_count": 45
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-11-05T01:49:11.059599Z",
     "start_time": "2025-11-05T01:49:11.054529Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 定义函数\n",
    "def f(x):\n",
    "    # return x ** 2\n",
    "    return (x + 3) ** 2 - 5\n",
    "\n",
    "\n",
    "# 定义梯度函数（对于一元函数来说就是导函数）\n",
    "def gradient(x):\n",
    "    # return 2 * x\n",
    "    return 2 * (x + 3)"
   ],
   "id": "e6db3faecc249430",
   "outputs": [],
   "execution_count": 46
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-11-05T01:49:11.072896Z",
     "start_time": "2025-11-05T01:49:11.068220Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 用列表保存点的变化轨迹\n",
    "x_list = []\n",
    "y_list = []"
   ],
   "id": "51a3aac078ac9406",
   "outputs": [],
   "execution_count": 47
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-11-05T01:49:11.088047Z",
     "start_time": "2025-11-05T01:49:11.083868Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 定义超参数以及 x 的初始值\n",
    "alpha = 0.1\n",
    "x = 1"
   ],
   "id": "63a1e0c34b9a93b1",
   "outputs": [],
   "execution_count": 48
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-11-05T01:49:11.110335Z",
     "start_time": "2025-11-05T01:49:11.103280Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 重复迭代100次\n",
    "for i in range(100):\n",
    "    y = f(x)\n",
    "    # 记录当前点的坐标\n",
    "    x_list.append(x)\n",
    "    y_list.append(y)\n",
    "    print(f'x={x}, f({x})={y}')\n",
    "    # 计算梯度\n",
    "    grad = gradient(x)\n",
    "    # 更新参数 x\n",
    "    x = x - alpha * grad"
   ],
   "id": "59eee3ac332d3736",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x=1, f(1)=11\n",
      "x=0.19999999999999996, f(0.19999999999999996)=5.240000000000002\n",
      "x=-0.44000000000000017, f(-0.44000000000000017)=1.5535999999999976\n",
      "x=-0.9520000000000001, f(-0.9520000000000001)=-0.8056960000000002\n",
      "x=-1.3616000000000001, f(-1.3616000000000001)=-2.3156454400000004\n",
      "x=-1.6892800000000001, f(-1.6892800000000001)=-3.2820130816000006\n",
      "x=-1.951424, f(-1.951424)=-3.9004883722240002\n",
      "x=-2.1611392, f(-2.1611392)=-4.29631255822336\n",
      "x=-2.32891136, f(-2.32891136)=-4.549640037262951\n",
      "x=-2.463129088, f(-2.463129088)=-4.711769623848288\n",
      "x=-2.5705032704, f(-2.5705032704)=-4.815532559262905\n",
      "x=-2.6564026163200003, f(-2.6564026163200003)=-4.881940837928259\n",
      "x=-2.725122093056, f(-2.725122093056)=-4.924442136274085\n",
      "x=-2.7800976744448, f(-2.7800976744448)=-4.951642967215415\n",
      "x=-2.82407813955584, f(-2.82407813955584)=-4.969051499017866\n",
      "x=-2.8592625116446717, f(-2.8592625116446717)=-4.980192959371434\n",
      "x=-2.8874100093157375, f(-2.8874100093157375)=-4.987323493997717\n",
      "x=-2.90992800745259, f(-2.90992800745259)=-4.9918870361585395\n",
      "x=-2.927942405962072, f(-2.927942405962072)=-4.994807703141465\n",
      "x=-2.9423539247696575, f(-2.9423539247696575)=-4.996676930010538\n",
      "x=-2.953883139815726, f(-2.953883139815726)=-4.997873235206744\n",
      "x=-2.9631065118525806, f(-2.9631065118525806)=-4.998638870532316\n",
      "x=-2.9704852094820646, f(-2.9704852094820646)=-4.9991288771406825\n",
      "x=-2.9763881675856516, f(-2.9763881675856516)=-4.999442481370036\n",
      "x=-2.981110534068521, f(-2.981110534068521)=-4.999643188076823\n",
      "x=-2.984888427254817, f(-2.984888427254817)=-4.999771640369167\n",
      "x=-2.9879107418038537, f(-2.9879107418038537)=-4.999853849836267\n",
      "x=-2.990328593443083, f(-2.990328593443083)=-4.99990646389521\n",
      "x=-2.9922628747544664, f(-2.9922628747544664)=-4.999940136892935\n",
      "x=-2.993810299803573, f(-2.993810299803573)=-4.999961687611479\n",
      "x=-2.995048239842858, f(-2.995048239842858)=-4.999975480071346\n",
      "x=-2.9960385918742864, f(-2.9960385918742864)=-4.999984307245661\n",
      "x=-2.9968308734994293, f(-2.9968308734994293)=-4.999989956637223\n",
      "x=-2.9974646987995435, f(-2.9974646987995435)=-4.999993572247823\n",
      "x=-2.997971759039635, f(-2.997971759039635)=-4.999995886238607\n",
      "x=-2.998377407231708, f(-2.998377407231708)=-4.999997367192709\n",
      "x=-2.998701925785366, f(-2.998701925785366)=-4.999998315003333\n",
      "x=-2.998961540628293, f(-2.998961540628293)=-4.999998921602133\n",
      "x=-2.9991692325026342, f(-2.9991692325026342)=-4.999999309825365\n",
      "x=-2.9993353860021075, f(-2.9993353860021075)=-4.999999558288234\n",
      "x=-2.999468308801686, f(-2.999468308801686)=-4.99999971730447\n",
      "x=-2.9995746470413485, f(-2.9995746470413485)=-4.99999981907486\n",
      "x=-2.9996597176330786, f(-2.9996597176330786)=-4.999999884207911\n",
      "x=-2.999727774106463, f(-2.999727774106463)=-4.9999999258930625\n",
      "x=-2.99978221928517, f(-2.99978221928517)=-4.99999995257156\n",
      "x=-2.9998257754281363, f(-2.9998257754281363)=-4.999999969645798\n",
      "x=-2.999860620342509, f(-2.999860620342509)=-4.999999980573311\n",
      "x=-2.999888496274007, f(-2.999888496274007)=-4.999999987566919\n",
      "x=-2.9999107970192056, f(-2.9999107970192056)=-4.999999992042828\n",
      "x=-2.9999286376153647, f(-2.9999286376153647)=-4.99999999490741\n",
      "x=-2.9999429100922916, f(-2.9999429100922916)=-4.999999996740742\n",
      "x=-2.999954328073833, f(-2.999954328073833)=-4.999999997914075\n",
      "x=-2.9999634624590668, f(-2.9999634624590668)=-4.999999998665008\n",
      "x=-2.9999707699672533, f(-2.9999707699672533)=-4.999999999145605\n",
      "x=-2.999976615973803, f(-2.999976615973803)=-4.999999999453188\n",
      "x=-2.9999812927790424, f(-2.9999812927790424)=-4.99999999965004\n",
      "x=-2.9999850342232337, f(-2.9999850342232337)=-4.999999999776025\n",
      "x=-2.999988027378587, f(-2.999988027378587)=-4.999999999856656\n",
      "x=-2.9999904219028695, f(-2.9999904219028695)=-4.99999999990826\n",
      "x=-2.9999923375222957, f(-2.9999923375222957)=-4.999999999941286\n",
      "x=-2.9999938700178364, f(-2.9999938700178364)=-4.999999999962423\n",
      "x=-2.999995096014269, f(-2.999995096014269)=-4.999999999975951\n",
      "x=-2.9999960768114153, f(-2.9999960768114153)=-4.999999999984609\n",
      "x=-2.9999968614491324, f(-2.9999968614491324)=-4.999999999990149\n",
      "x=-2.999997489159306, f(-2.999997489159306)=-4.999999999993696\n",
      "x=-2.9999979913274446, f(-2.9999979913274446)=-4.999999999995965\n",
      "x=-2.9999983930619556, f(-2.9999983930619556)=-4.999999999997418\n",
      "x=-2.9999987144495646, f(-2.9999987144495646)=-4.999999999998347\n",
      "x=-2.9999989715596516, f(-2.9999989715596516)=-4.999999999998942\n",
      "x=-2.9999991772477212, f(-2.9999991772477212)=-4.999999999999323\n",
      "x=-2.999999341798177, f(-2.999999341798177)=-4.999999999999567\n",
      "x=-2.9999994734385416, f(-2.9999994734385416)=-4.999999999999723\n",
      "x=-2.9999995787508333, f(-2.9999995787508333)=-4.999999999999822\n",
      "x=-2.9999996630006667, f(-2.9999996630006667)=-4.999999999999886\n",
      "x=-2.9999997304005332, f(-2.9999997304005332)=-4.999999999999927\n",
      "x=-2.9999997843204267, f(-2.9999997843204267)=-4.999999999999954\n",
      "x=-2.9999998274563415, f(-2.9999998274563415)=-4.99999999999997\n",
      "x=-2.9999998619650734, f(-2.9999998619650734)=-4.999999999999981\n",
      "x=-2.9999998895720585, f(-2.9999998895720585)=-4.999999999999988\n",
      "x=-2.999999911657647, f(-2.999999911657647)=-4.999999999999992\n",
      "x=-2.9999999293261177, f(-2.9999999293261177)=-4.999999999999995\n",
      "x=-2.999999943460894, f(-2.999999943460894)=-4.9999999999999964\n",
      "x=-2.9999999547687155, f(-2.9999999547687155)=-4.999999999999998\n",
      "x=-2.9999999638149726, f(-2.9999999638149726)=-4.999999999999999\n",
      "x=-2.9999999710519782, f(-2.9999999710519782)=-4.999999999999999\n",
      "x=-2.9999999768415826, f(-2.9999999768415826)=-4.999999999999999\n",
      "x=-2.999999981473266, f(-2.999999981473266)=-5.0\n",
      "x=-2.9999999851786128, f(-2.9999999851786128)=-5.0\n",
      "x=-2.99999998814289, f(-2.99999998814289)=-5.0\n",
      "x=-2.999999990514312, f(-2.999999990514312)=-5.0\n",
      "x=-2.9999999924114498, f(-2.9999999924114498)=-5.0\n",
      "x=-2.9999999939291597, f(-2.9999999939291597)=-5.0\n",
      "x=-2.9999999951433276, f(-2.9999999951433276)=-5.0\n",
      "x=-2.999999996114662, f(-2.999999996114662)=-5.0\n",
      "x=-2.99999999689173, f(-2.99999999689173)=-5.0\n",
      "x=-2.9999999975133838, f(-2.9999999975133838)=-5.0\n",
      "x=-2.999999998010707, f(-2.999999998010707)=-5.0\n",
      "x=-2.9999999984085655, f(-2.9999999984085655)=-5.0\n",
      "x=-2.999999998726852, f(-2.999999998726852)=-5.0\n",
      "x=-2.999999998981482, f(-2.999999998981482)=-5.0\n"
     ]
    }
   ],
   "execution_count": 49
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-11-05T01:49:11.131215Z",
     "start_time": "2025-11-05T01:49:11.128924Z"
    }
   },
   "cell_type": "code",
   "source": "",
   "id": "5e074fe9147f4cd6",
   "outputs": [],
   "execution_count": null
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-11-05T01:49:11.300735Z",
     "start_time": "2025-11-05T01:49:11.156657Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# 画图\n",
    "x = np.arange(-5, 1, 0.01)\n",
    "plt.plot(x, f(x))\n",
    "plt.plot(x_list, y_list, 'r')\n",
    "plt.scatter(x_list, y_list, color='red')\n",
    "plt.xlabel('x')\n",
    "plt.ylabel('f(x)')\n",
    "plt.show()"
   ],
   "id": "9039df0e9f6744aa",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data",
     "jetTransient": {
      "display_id": null
     }
    }
   ],
   "execution_count": 50
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
